{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "370c8d21",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2737423a",
   "metadata": {},
   "source": [
    "# 上周回顾  \n",
    "## JSON(文本数据)--> Dict（python中的字典数据）  \n",
    "## 字典和列表的综合实践"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0bd49e7e",
   "metadata": {},
   "source": [
    "# 本周内容：\n",
    "\n",
    "## 集合\n",
    "\n",
    "[集合]（https://docs.python.org/3/tutorial/datastructures.html#sets）\n",
    "\n",
    "> 1.集合的性质  \n",
    ">> 1.无序（unordered）  \n",
    ">> 2.不重复（no duplicate）  \n",
    "\n",
    "> 2.集合的一般方法  \n",
    ">> 1.增加  \n",
    ">> 2.删除  \n",
    ">> 3.查询:in查询成员关系\n",
    "\n",
    "> 3.集合的数学逻辑运算  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "005dafc2",
   "metadata": {},
   "source": [
    "## 集合的性质及概念"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c62a8e51",
   "metadata": {},
   "source": [
    "*  思考：我想了解一组数据中有哪些唯一存在的值？（假如是列表）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1ecbcd56",
   "metadata": {},
   "outputs": [],
   "source": [
    "no_duplicate_age = []\n",
    "list_age = [18,24,25,24,18,23,18]\n",
    "for i in list_age:\n",
    "    if i not in no_duplicate_age:\n",
    "        no_duplicate_age.append(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "656cc4fd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[18, 24, 25, 23]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "no_duplicate_age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b585ab54",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{18, 23, 24, 25}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# list --> set的方法：set（）\n",
    "no_duplicate_age_set = set(list_age)\n",
    "no_duplicate_age_set "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "05010148",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'orange', 'apple', 'pear', 'banana'}\n",
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "# 官方文档测试代码\n",
    "# 1.移除重复项\n",
    "basket = {'apple','orange','apple','pear','orange','banana'}\n",
    "print(basket)\n",
    "# 2.in查询成员关系\n",
    "print('orange'in basket)\n",
    "print('crabgrass'in basket)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "612b96a8",
   "metadata": {},
   "source": [
    "## 集合的一般方法"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26b01264",
   "metadata": {},
   "source": [
    "* 集合的创建的两种一般方法\n",
    "> 1.set(list)  \n",
    "> 2.直接按照集合结构创建{value1，value2，...}  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23d4c933",
   "metadata": {},
   "source": [
    "> 1.增加  \n",
    "> * add() ： Add an element to a set  \n",
    "| 注意： This has no effect if the element is already present."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "22f2b362",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0, 1, 66, 3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "set_1 = set([1,3,4,0,8,66,7])\n",
    "print(set_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "0efe35bb",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0, 1, 66, 3, 4, 7, 8, 11}\n"
     ]
    }
   ],
   "source": [
    "set_1.add(11)\n",
    "print(set_1)\n",
    "\n",
    "# 11这个新增加的值,是无序添加的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "a1e94ba2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0, 1, 66, 3, 4, 7, 8, 11}\n"
     ]
    }
   ],
   "source": [
    "set_1.add(66)\n",
    "print(set_1)\n",
    "\n",
    "#  重复的也不会报错\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de6b0bc6",
   "metadata": {},
   "source": [
    "> 2.删除\n",
    ">> 1. pop():Remove and return an arbitrary set element.Raises KeyError if the set is empty.\n",
    ">> 2. remove()\n",
    ">> 3. discard"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "d692f7bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{0, 1, 66, 3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "set_1 = set([1,3,4,0,8,66,7])\n",
    "print(set_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "c02cba4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function pop:\n",
      "\n",
      "pop(...) method of builtins.set instance\n",
      "    Remove and return an arbitrary set element.\n",
      "    Raises KeyError if the set is empty.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(set_1.pop)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "6afce4c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1, 66, 3, 4, 7, 8}\n",
      "{66, 3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "# 1. Remove and return an arbitrary set element.\n",
    "print(set_1)\n",
    "set_1.pop()\n",
    "print(set_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "2efb8ccb",
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'pop from an empty set'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-68-0defeaec728f>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# 2. Raises KeyError if the set is empty.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0mset_2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mset_2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m: 'pop from an empty set'"
     ]
    }
   ],
   "source": [
    "# 2. Raises KeyError if the set is empty.\n",
    "set_2 = set([])\n",
    "set_2.pop()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "b265af07",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function remove:\n",
      "\n",
      "remove(...) method of builtins.set instance\n",
      "    Remove an element from a set; it must be a member.\n",
      "    \n",
      "    If the element is not a member, raise a KeyError.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(set_1.remove)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "7ed59783",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{66, 3, 4, 7, 8}\n",
      "{3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "# 1. Remove an element from a set; it must be a member.\n",
    "print(set_1)\n",
    "set_1.remove(66)\n",
    "print(set_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "069f923e",
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "66",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-72-85fbdeb7befa>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# 2. If the element is not a member, raise a KeyError. 一般项目中 remove（）会和 in 共同使用\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mset_1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m66\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m: 66"
     ]
    }
   ],
   "source": [
    "# 2. If the element is not a member, raise a KeyError. 一般项目中 remove（）会和 in 共同使用\n",
    "set_1.remove(66)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "01a71232",
   "metadata": {},
   "outputs": [],
   "source": [
    "# * 避免KeyError的方式：\n",
    "if 66 in set_1:\n",
    "    set_1.remove(66)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "388c3d1f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function discard:\n",
      "\n",
      "discard(...) method of builtins.set instance\n",
      "    Remove an element from a set if it is a member.\n",
      "    \n",
      "    If the element is not a member, do nothing.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(set_1.discard)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "84580120",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "print(set_1)\n",
    "set_1.discard(66)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "a98f0b18",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function remove:\n",
      "\n",
      "remove(...) method of builtins.set instance\n",
      "    Remove an element from a set; it must be a member.\n",
      "    \n",
      "    If the element is not a member, raise a KeyError.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(set_1.remove)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7e7ab1d",
   "metadata": {},
   "source": [
    "## 集合的运算\n",
    "\n",
    "> 1. 集合的交集\n",
    "> 2. 集合的并集\n",
    "> 3. 集合的差集\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "767a5b25",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n"
     ]
    }
   ],
   "source": [
    "set_1 = set([1,2,5,6,7,2,3,2,4,4])\n",
    "set_2 = set([1,3,4,0,8,66,7])\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "291282ee",
   "metadata": {},
   "source": [
    "> 1. 集合的交集\n",
    ">> 1. 使用集合的方法:set_1.intersection(set_2)\n",
    ">> 2. 使用逻辑运算符:set_1&set_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "06f4f243",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on built-in function intersection:\n",
      "\n",
      "intersection(...) method of builtins.set instance\n",
      "    Return the intersection of two sets as a new set.\n",
      "    \n",
      "    (i.e. all elements that are in both sets.)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(set_1.intersection)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "id": "f6a2c7b6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "交集结果 :  {1, 3, 4, 7}\n"
     ]
    }
   ],
   "source": [
    "# 使用集合的方法：set_1.intersection(set_2)\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"交集结果 : \",set_1.intersection(set_2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "c3ce721f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "交集结果 :  {1, 3, 4, 7}\n"
     ]
    }
   ],
   "source": [
    "# 使用逻辑运算符：set_1 & set_2\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"交集结果 : \",set_1 & set_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "90c6c357",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 实践：\n",
    "set_1_xu = {\"星期一12-14\",\"星期二3-5\",\"星期二12-14\" }\n",
    "set_2_前端 = {\"星期二3-5\",\"星期二12-14\"}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "id": "48671ec2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'星期二3-5', '星期二12-14'}\n",
      "结论：周一班 API课 让给前端的同学~\n"
     ]
    }
   ],
   "source": [
    "print(set_1_xu & set_2_前端)\n",
    "print(\"结论：周一班 API课 让给前端的同学~\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d58f212f",
   "metadata": {},
   "source": [
    "> 2. 集合的并集\n",
    ">> 1. 使用并集的方法:set_1.union(set_2)\n",
    ">> 2. 使用逻辑运算符:set_1 | set_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "f9847c4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "交集结果 :  {0, 1, 2, 3, 4, 5, 6, 7, 66, 8}\n"
     ]
    }
   ],
   "source": [
    "# 1.使用并集的方法：set_1.union(set_2)\n",
    "\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"交集结果 : \",set_1.union(set_2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "159e1ce5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "交集结果 :  {0, 1, 2, 3, 4, 5, 6, 7, 66, 8}\n"
     ]
    }
   ],
   "source": [
    "# 2. 使用逻辑运算符：set_1 | set_2\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"交集结果 : \",set_1 | set_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "id": "93ff4087",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "开始的时间 :  1638430438.786878\n",
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "交集结果 :  {0, 1, 2, 3, 4, 5, 6, 7, 66, 8}\n",
      "结束的时间 :  1638430438.7878733\n",
      "运行的时间 :  0.0009951591491699219\n"
     ]
    }
   ],
   "source": [
    "# 计算运行效率 = 运行后的时间节点 - 运行前的时间节点  : 思考并对比列表运算的执行效率 \n",
    "import time\n",
    "start_time = time.time()\n",
    "print(\"开始的时间 : \",start_time)\n",
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"交集结果 : \",set_1 | set_2)\n",
    "stop_time = time.time()\n",
    "print(\"结束的时间 : \",stop_time)\n",
    "print(\"运行的时间 : \", stop_time - start_time)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e5bbe49",
   "metadata": {},
   "source": [
    "> 3. 集合的差值(考虑先后顺序)\n",
    ">> 1. 使用差集的方法:set_1.difference(set_2)\n",
    ">> 2. 使用逻辑运算符:set_1 - set_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "id": "b411c8ad",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "set_1 和 set_2 差集结果 :  {2, 5, 6}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"set_1 和 set_2 差集结果 : \",set_1.difference(set_2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "2b492be1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "set_2 和 set_1 差集结果 :  {0, 8, 66}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"set_2 和 set_1 差集结果 : \",set_2.difference(set_1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "id": "c5be96ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "set_1 和 set_2 差集结果 :  {2, 5, 6}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"set_1 和 set_2 差集结果 : \",set_1 - set_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "id": "c6c34391",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "set_2 和 set_1 差集结果 :  {0, 8, 66}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"set_2 和 set_1 差集结果 : \",set_2 - set_1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f53dc4e2",
   "metadata": {},
   "source": [
    "> 4. 对称差值\n",
    ">> 1. 用对称差集的方法：set_1.symmetric_difference(set_2)\n",
    ">> 2. 使用逻辑运算符：? (set_1 - set_2) | (set_2-set_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "5df04525",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "对称差集结果 :  {0, 66, 2, 5, 6, 8}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"对称差集结果 : \",set_1.symmetric_difference(set_2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "71759ddd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "set_1 :  {1, 2, 3, 4, 5, 6, 7}\n",
      "set_2 :  {0, 1, 66, 3, 4, 7, 8}\n",
      "对称差集结果 :  {0, 2, 66, 5, 6, 8}\n"
     ]
    }
   ],
   "source": [
    "print(\"set_1 : \",set_1)\n",
    "print(\"set_2 : \",set_2)\n",
    "print(\"对称差集结果 : \",(set_1 - set_2) | (set_2-set_1))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e8d7995",
   "metadata": {},
   "source": [
    "<b><font size=\"4\">集合的实践:(p129)</font></b>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d767715f",
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# vowels = set('aeiou')  \n",
    "# word = input(\"Provide a word to search for vowels:\")  \n",
    "# found = vowels.intersection(set(word))  \n",
    "# for vowel in found:            \n",
    "#     print(vowel)  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "e26a2cd0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Provide a word to search for vowels:isagldfgkklsjhvdafsgh\n",
      "i\n",
      "a\n"
     ]
    }
   ],
   "source": [
    "vowels = set('aeiou')\n",
    "word = input(\"Provide a word to search for vowels:\")\n",
    "found = vowels.intersection(set(word))\n",
    "for vowel in found:          \n",
    "    print(vowel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "f642ef1d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "vowels :  {'u', 'i', 'e', 'o', 'a'}\n",
      "Provide a word to search for vowels:czdfghjkl;lkjhgfd\n",
      "word :  {'l', ';', 'k', 'd', 'z', 'j', 'f', 'h', 'c', 'g'}\n",
      "set()\n"
     ]
    }
   ],
   "source": [
    "vowels = set('aeiou')\n",
    "print(\"vowels : \",vowels)\n",
    "word = input(\"Provide a word to search for vowels:\")\n",
    "print(\"word : \",set(word))\n",
    "found = vowels.intersection(set(word))\n",
    "print(found)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d24a6bbe",
   "metadata": {},
   "source": [
    "<b><font size=\"4\">课后作业:(p129)</font></b>\n",
    " > 1. 课堂练习\n",
    " > 2. 课本第三章 课后项目练习\n",
    " > 3. 总结集合方法"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
